package isomorphic.number;

import java.util.HashMap;
import java.util.Map;

/**
 * @Time 2019/12/21
 * @author 王光浩
 * @Need 给出两个数判断这两个数是否为同构数字，同构数的定义为：（如果 s 中的字符可以被替换得到 t ，那么这两个字符串是同构的。
 *       所有出现的字符都必须用另一个字符替换，同时保留字符的顺序。两个字符不能映射到同一个字符上，但字符可以映射自己本身。）
 * @Method 使用HashMap。设置两个HashMap，key为元素值，value为元素值对应的下标。使用一个循环，同时将字符串
 *         S和字符串T中的字符加入到HashMap中，并且判断在HashMap中是否存在对应的字符，在循环过程中当前
 *         下标字符在s的HashMap中存在，那么在T字符串中对应的字符一定要在t的HashMap中存在，否则返回false。
 */
public class MyMethodTwo {
    public boolean isIsomorphic(String s, String t) {
    	Map<Character,Integer> sHashMap=new HashMap<Character,Integer>();
    	Map<Character,Integer> tHashMap=new HashMap<Character,Integer>();
    	int sLen=s.length();
    	if(sLen!=t.length())return false;
    	char schar;
    	char tchar;
    	//将两个字符串中的数据存在对应的HashMap中，对于当前的字符，如果在两个HashMap中都不包含对应下标
    	//字符，则加入到hashMap中，否则如果包含则在对应下标出都需要出现对应字符
    	for(int i=0;i<sLen;i++) {
    		schar=s.charAt(i);
    		tchar=t.charAt(i);
    		if(sHashMap.containsKey(schar) || tHashMap.containsKey(tchar)) {
    			if(sHashMap.get(schar)==null || tHashMap.get(tchar)==null)
    				return false;
    			if(sHashMap.get(schar)!=tHashMap.get(tchar))
    				return false;
    			continue;
    		}
    		sHashMap.put(schar, i);tHashMap.put(tchar, i);
    	}
    	return true;
    }
}
